# coding:utf8
# 1. 说明列表的浅拷贝和深拷贝的区别

# 浅拷贝：只拷贝引用，没有拷贝数据内容本身。没有生成新对象。
#       值改变会使所有引用变量同步改变
# 深拷贝：完全拷贝，生成全新的对象，只是值与被拷贝的对象相同。
#       二者再无任何关系。

# 2. 说明列表和元组的相同点和不同点

# 相同点：可迭代，可强制转换类型
# 不同点：列表是list型，元素可变，可增减，大小可变，元组是tuple型，元素不可变，大小不可变。

# 3. 请写出字符串支持的所有方法及说明（例如: lower 返回字符串的小写）
# count:返回指定字符串的出现的次数，时间复杂度O(n)，性能差
# upper:返回全部大写，时间复杂度O(n)
# lower：返回全部小写，时间复杂度O(n)
# index：找到子串的索引，时间复杂度O(n)，性能差,找不到会报错
# rindex：反向找到子串的索引，时间复杂度O(n)，性能差,找不到会报错
# find：找到子串的索引，时间复杂度O(n)，性能差，找不到返回负数
# count:返回子区间内出现子串的次数，时间复杂度O(n)，性能差，
# split:以输入字符串从左侧进行分割，形成新列表，断点消失。可设置最大切割数
# rsplit:以输入字符串从右侧进行分割，形成新列表，断点消失。可设置最大切割数
# splitlines:切成多行
# partition:以字符串分割，返回元组
# replace：替换所有字符串
# join:在join的每个字符中间插入原字符串
# capitalize:首字母大写
# title:每个单词首字母大写，其他字符小写
# endswith:判断字符串以输入字符串结尾，返回逻辑值
# startswith:在指定范围内判断是否以指定字符串开始，返回逻辑值
# encode:用指定方法编码
# strip:移除指定字符串，默认移除空格
# lstrip:移除左边空格
# rstrip:移除右面空格
# translate:字符串翻译
# zfill:返回指定长度字符串，右对齐，前面填充0
# swapcase:翻转大小写
# format:字符串格式化
# partition:在第一次出现指定字符串的位置，把原字符串分割成一个三元素的元组。





# 4. 使用选择排序算法实现排序[3, 5, 1, 7, 9, 6, 8]

numlist = [3, 5, 1, 7, 9, 6, 8]
# 长度
length = len(numlist)
# 交换次数
count = 0
# 遍历次数
n = 0

for jj in range(length - 1):

    minnum = numlist[jj]
    index = jj
    for ii in range(jj, length):
        n += 1
        if numlist[ii] < minnum:
            minnum = numlist[ii]
            index = ii
            flag = True
            count += 1
    # 如果第一个就对了,就不交换,否则才交换
    if jj != index:
        # 交换
        temp = numlist[jj]
        numlist[jj] = numlist[index]
        numlist[index] = temp
        print(numlist)

print(numlist, n, count)

# 5. 有如下一个字符串变量logs，请统计出每种请求类型的数量
# （提示：空格分割的第2列是请求类型），得到如下输出：


logs = '''

111.30.144.7 "POST /mock/login/?t=GET HTTP/1.1" 200 

111.30.144.7 "Get /mock/users/?t=POST HTTP/1.1" 200 

111.13.100.92 "Post /mock/login/ HTTP/1.1" 200 

223.88.60.88 "GET /mock/users/?t=POST HTTP/1.1" 200 

111.30.144.7 "GET /mock/users/ HTTP/1.1" 200 

'''
import re

obj = re.compile('".*? /')
# objPOST=re.compile('POST')

# print('POST',len(objPOST.findall(logs)))

lst=(obj.findall(logs))
print(lst)
n_get=0
n_post=0

for ii in lst:
    lower=ii.lower()
    if lower.startswith('get',1,-1):
        n_get+=1
    if lower.startswith('post',1,-1):
        n_post+=1
print('GET {}次，POST {}次'.format(n_get,n_post))
